#ifndef RTSP_SERVER_H
#define RTSP_SERVER_H

#include <liveMedia.hh>
#include <BasicUsageEnvironment.hh>
#include <GroupsockHelper.hh>

class RTSPServer {
public:
    // 构造函数和析构函数
    RTSPServer(int port = 8554);
    ~RTSPServer();
    
    // 启动RTSP服务器
    bool start();
    
    // 停止RTSP服务器
    void stop();
    
    // 添加H264流
    bool addH264Stream(const char* streamName, const char* filePath);
    
    // 添加H265流
    bool addH265Stream(const char* streamName, const char* filePath);
    
    // 添加MJPEG流
    bool addMJPEGStream(const char* streamName, const char* filePath);
    
    // 获取服务器状态
    bool isRunning() const { return m_isRunning; }
    
    // 获取服务器URL
    std::string getServerUrl() const;
    
private:
    // 服务器参数
    int m_port;                      // RTSP服务器端口
    bool m_isRunning;                // 服务器运行状态
    
    // live555相关对象
    TaskScheduler* m_scheduler;      // 任务调度器
    UsageEnvironment* m_environment; // 使用环境
    ::RTSPServer* m_rtspServer;      // live555的RTSP服务器
    
    // 创建服务器
    bool createServer();
    
    // 创建媒体会话
    ServerMediaSession* createServerMediaSession(const char* streamName, const char* description);
    
    // 创建H264视频源
    ServerMediaSubsession* createH264ServerMediaSubsession(UsageEnvironment& env, const char* filePath, bool reuseFirstSource);
    
    // 创建H265视频源
    ServerMediaSubsession* createH265ServerMediaSubsession(UsageEnvironment& env, const char* filePath, bool reuseFirstSource);
    
    // 创建MJPEG视频源
    ServerMediaSubsession* createMJPEGServerMediaSubsession(UsageEnvironment& env, const char* filePath, bool reuseFirstSource);
    
    // 事件循环线程函数
    static void eventLoopThread(void* data);
    std::thread m_eventLoopThread;   // 事件循环线程
};

#endif // RTSP_SERVER_H